package algorithm.string;

import java.util.Objects;

/**
 * 最长公共前缀
 * 编写一个函数来查找字符串数组中的最长公共前缀。
 * <p>
 * 如果不存在公共前缀，返回空字符串 ""。
 */
public class Demo9 {

    /**
     * 示例 1：
     * <p>
     * 输入：strs = ["flower","flow","flight"]
     * 输出："fl"
     * 示例 2：
     * <p>
     * 输入：strs = ["dog","racecar","car"]
     * 输出：""
     * 解释：输入不存在公共前缀。
     *
     * <p>
     * 提示：
     * <p>
     * 1 <= strs.length <= 200
     * 0 <= strs[i].length <= 200
     * strs[i] 仅由小写英文字母组成
     *
     * @param args
     */
    public static void main(String[] args) {

        String[] strings = new String[]{"ac", "ac", "a","a"};
        System.out.println(longestCommonPrefix(strings));
    }

    private static String longestCommonPrefix(String[] strs) {
        if (strs.length == 0) {
            return "";
        }
        if (strs.length == 1) {
            return strs[0];
        }

        if (Objects.equals(strs[0], "")) {
            return "";
        }

        int len = strs[0].length();
        int e = 0;
        // 数组的长度
        out:
        for (int i = 0; i < len; i++) {
            if (Objects.equals(strs[0], "")) {
                return "";
            }
            char c = strs[0].charAt(i);
            for (int j = 1; j < strs.length; j++) {
                if (Objects.equals(strs[j], "")) {
                    e = 0;
                    break out;
                }
                if (i >= strs[j].length()) {
                    e = i;
                    break out;
                }
                if (c != strs[j].charAt(i)) {
                    e = i;
                    break out;
                } else {
                    e = i + 1;
                }
            }
        }

        String pre = "";

        for (int i = 0; i <= e - 1; i++) {
            pre = pre + strs[0].charAt(i);
        }

        return pre;
    }
}
